package innerclass_;

public class LocalInnerclass {
    public static void main(String[] args) {
         Outer01 m=new Outer01();
         m.m();
        System.out.println("m 的 hashcode() is "+m.hashCode());

    }
}
class Outer01{
    private int n1=1000000;
    private void fun(){
        System.out.println("fun() is working , n1 = "+n1);
    }
    {
        System.out.println("code block is working ...");
    }

    {
        class Inner01 {//内部类通常定义在方法或者代码块中， 作用域在代码块中或者方法中，

            public void fuck() {//内部类可以直接调用外部类的方法和成员（包括私有的）
                System.out.println("fuck is working , Outer n1 = " + n1);
                fun();
            }
        }

        new Inner01().fuck();
    }

    public void m(){

        //其他类不能调用内部类，因为这是一个局部变量，作用域有限，连属性都算不上。
        int n1=10009;

        //内部类不能有修饰符，只有final除外
       final class Inner02{//内部类通常定义在方法中，只要是，代码块中也可以定义内部类
            public void fuck(){//内部类可以直接调用外部类的方法和成员（包括私有的）
                System.out.println("fuck is working , Outer n1 = "+n1);//10009 调用n1遵从就近原则
                System.out.println("Outer n1 = "+Outer01.this.n1);//外面的n1，Outer.this 表示的就是调用调用这个函数的对象
                System.out.println("Outer01.this hashcode is "+Outer01.this.hashCode());
                fun();
            }
        }

        new Inner02().fuck();//调用内部类还是要同过new对象的方式
    }

}